package pl.allegro.search.preferences;

import java.io.IOException;
import java.util.Properties;
import java.util.Set;
import java.util.Map.Entry;

import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import pl.allegro.search.extension.Activator;


/**
 * This class represents a preference page that
 * is contributed to the Preferences dialog. By 
 * sub classing <samp>FieldEditorPreferencePage</samp>, we
 * can use the field support built into JFace that allows
 * us to create a page that is small and knows how to 
 * save, restore and apply itself.
 * <p>
 * This page is used to modify preferences only. They
 * are stored in the preference store that belongs to
 * the main plug-in class. That way, preferences can
 * be accessed directly via the preference store.
 */
public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

	public PreferencePage() {
		super(GRID);
		setPreferenceStore(Activator.getDefault().getPreferenceStore());
		setDescription("Allegro Plugin Preferences");
	}

	/**
	 * Creates the field editors. Field editors are abstractions of
	 * the common GUI blocks needed to manipulate various types
	 * of preferences. Each field editor knows how to save and
	 * restore itself.
	 **/
	public void createFieldEditors() {
		addField(new StringFieldEditor(PreferenceConstants.P_ALLEGRO_USER_NAME, "User &Name:", getFieldEditorParent()));
		addField(new StringFieldEditor(PreferenceConstants.P_ALLEGRO_USER_PASSWORD, "&Password:", getFieldEditorParent()));
		
		addField(new ComboFieldEditor(PreferenceConstants.P_ALLEGRO_WEBAPI_COUNTRY, "WebApi, &Country :", getCountries(),getFieldEditorParent()));
		
		addField(new StringFieldEditor(PreferenceConstants.P_ALLEGRO_WEBAPI_KEY, "WebApi, &Key :", getFieldEditorParent()));
		addField(new StringFieldEditor(PreferenceConstants.P_ALLEGRO_WEBAPI_VERSION_KEY, "WebApi, &Version Key:", getFieldEditorParent()));
	}
	
	static class CountiesHolder{
		static String [][] countries;
		static {
			Properties properties = new Properties();
			try {
				properties.load(PreferencePage.class.getResourceAsStream("webapi.countries.properties"));
				Set<Entry<Object, Object>> entrySet = properties.entrySet();
				countries = new String[entrySet.size()][2];
				int i = 0; 
				for (Entry<Object, Object> entry : entrySet) {
					countries[i][0] = (String)entry.getKey();
		            countries[i][1] = (String)entry.getValue();
		            i++;
				}
			} catch (IOException e) {}
		}
	}
	private String[][] getCountries() {
		return CountiesHolder.countries;
	}

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
	 */
	public void init(IWorkbench workbench) {}

}